package com.itheima.entry;

import com.itheima.domain.Student;

import java.util.ArrayList;
import java.util.Scanner;

/*
2.创建学生对象使用带参数构造方法
3.删除和 修改的优化 也使用  死循环
4. 解决删除和修改的 bug (集合中没有数据)
 */
public class studentEntry {
    public static void main(String[] args) {
        //创建Scanne对象,为键盘录入做准备
        Scanner sc = new Scanner(System.in);
        //创建ArrayList对象,保证学生信息的添加,为方法传递参数
        ArrayList<Student> list = new ArrayList<>();
        //创建死循环,输出学生管理系统的界面
        loop:
        while (true) {
            //学生管理系统界面
            System.out.println("--------欢迎来到学生管理系统--------");
            System.out.println("1 添加学生");
            System.out.println("2 删除学生");
            System.out.println("3 修改学生");
            System.out.println("4 查看学生");
            System.out.println("5 退出");
            System.out.println("请输入您的选择:");
            //键盘录入选择
            String choice = sc.next();
            switch (choice) {
                case "1":
                    //System.out.println("添加成功");
                    addStudent(list);
                    break;
                case "2":
                    //System.out.println("删除成功");
                    deleteStudent(list);
                    break;
                case "3":
                    //System.out.println("修改成功");
                    updateStudent(list);
                    break;
                case "4":
                    //System.out.println("查看成功");
                    findAllSyudent(list);
                    break;
                case "5":
                    System.out.println("退出");
                    break loop;
                default:
                    System.out.println("您的输入有误,请重新输入");
                    break;
            }
        }
    }

    private static void deleteStudent(ArrayList<Student> list) {
        //判断集合内容是否为空,若为空,输出提示信息,结束方法
        if (list.size() == 0 || list == null) {
            System.out.println("不存在学生信息,请添加");
            return;
        }

        //创建Scanner对象,为键盘录入做准备
        Scanner sc = new Scanner(System.in);
        String sid = null;
        int index = -1;
        //键盘录入学生的学号
        while (true) {
            System.out.println("请输入学生的学号:");
            sid = sc.next();
            //调用方法,查看sid对应的student在集合的位置
            index = getIndex(list, sid);
            if (index >= 0) {
                //若找到位置则删除
                break;
            } else {
                //没有找到,输出提示信息
                System.out.println("输入的学号不存在");
            }
        }
        list.remove(index);
        System.out.println("删除成功");
    }

    private static void updateStudent(ArrayList<Student> list) {
        //判断集合内容是否为空,若为空,输出提示信息,结束方法
        if (list.size() == 0 || list == null) {
            System.out.println("不存在学生信息,请添加");
            return;
        }

        //创建Scanner对象,准备键盘录入
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入学生的学号:");
            String sid = sc.next();
            //调用方法,查看sid对应的student在集合的位置
            int index = getIndex(list, sid);
            if (index >= 0) {
                //若找得到sid对应的student,键盘录入需要修改的对象
                System.out.println("请输入修改的学生姓名:");
                String name = sc.next();
                System.out.println("请输入修改的学生年龄:");
                int age = sc.nextInt();
                System.out.println("请输入修改的学生生日:");
                String birthday = sc.next();
                //将sid,以及其他录入的对象,添加到创建的student对象中
                Student student = new Student(sid, name, age, birthday);
                //使用set方法修改集合元素
                list.set(index, student);
                System.out.println("修改成功");
            } else {
                //没有找到,输出提示信息
                System.out.println("输入的学号不存在");
            }
        }
    }

    private static int getIndex(ArrayList<Student> list, String sid) {
        //遍历集合
        for (int i = 0; i < list.size(); i++) {
            //list.get(i)
            Student student = list.get(i);
            //若集合中存在sid的student对象,返回i表示sid对应的元素在集合的位置,否则返回-1
            if (sid.equals(student.getSid())) {
                return i;
            }
        }
        return -1;
    }

    private static void findAllSyudent(ArrayList<Student> list) {
        //判断集合内容是否为空,若为空,输出提示信息,结束方法
        if (list.size() == 0 || list == null) {
            System.out.println("不存在学生信息,请添加");
            return;
        }
        //输出查看信息时的首行信息,即学生的学号,姓名,年龄等
        System.out.println("学号" + "\t\t" + "姓名" + "\t\t" + "年龄" + "\t\t" + "生日");
        //遍历集合
        for (int i = 0; i < list.size(); i++) {
            //list.get(i)
            //将遍历元素创建student变量,方法调用方法
            Student student = list.get(i);
            //输出集合中得的信息
            System.out.println(student.getSid() + "\t" + student.getName() +
                    "\t\t" + student.getAge() + "岁\t" + student.getBirthday());
        }
    }

    public static void addStudent(ArrayList<Student> list) {
        //准备键盘录入,创建Scanner对象,为输入学生信息做准备
        Scanner sc = new Scanner(System.in);
        //判断输入的学号是否已经输入,若重复,重新输入,若不重复,退出循环
        String sid = null;
        while (true) {
            //键盘录入字符串
            System.out.println("请输入学生学号:");
            sid = sc.next();
            //调用方法判断是否重复
            boolean exist = isExist(list, sid);
            //判断为TRUE输出提示信息,再次循环,若不存在,退出循环
            if (exist) {
                System.out.println("输入的学号已经存在,请重新输入");
            } else {
                break;
            }
        }
        //输入的学号不存在,可以继续录入键盘信息
        System.out.println("请输入学生姓名:");
        String name = sc.next();
        System.out.println("请输入学生年龄:");
        int age = sc.nextInt();
        System.out.println("请输入学生生日:");
        String birthday = sc.next();
        //创建学生对象,将键盘录入信息添加到学生对象
        Student student = new Student(sid, name, age, birthday);
        //将学生对象添加到集合
        list.add(student);
        //输出成功信息
        System.out.println("添加学生信息成功");
    }

    private static boolean isExist(ArrayList<Student> list, String sid) {
        //遍历字符串
        for (int i = 0; i < list.size(); i++) {
            //list.get(i)
            //为便利的元素创建变量,方便调用方法
            Student student = list.get(i);
            //判断sid 在集合中是否存在,若存在,返回TRUE,若不存在,返回FALSE
            if (sid.equals(student.getSid())) {
                return true;
            }
        }
        return false;
    }
}
